<?php
/**
 * Created by PhpStorm.
 * User: dy
 * Date: 2019/12/26
 * Time: 15:58
 */
namespace util;
class CommonUtil
{
    protected static $instance = null;
    private function __construct()
    {
    }
    private function __clone()
    {
    }

    public static function instance(){
        if(empty(self::$instance)){
            self::$instance = new static();
        }
        return self::$instance;
    }
    /**
     * 数据签名认证
     * @param  array  $data 被认证的数据
     * @return string       签名
     */
    public function data_auth_sign($data)
    {

        // 数据类型检测
        if (!is_array($data)) {

            $data = (array)$data;
        }

        // 排序
        ksort($data);

        // url编码并生成query字符串
        $code = http_build_query($data);

        // 生成签名
        $sign = sha1($code);

        return $sign;
    }

    /**
     * 格式化字节大小
     * @param  number $size      字节数
     * @param  string $delimiter 数字和单位分隔符
     * @return string            格式化后的带单位的大小
     */
    function format_bytes($size, $delimiter = '')
    {

        $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');

        for ($i = 0; $size >= 1024 && $i < 5; $i++) {

            $size /= 1024;
        }

        return round($size, 2) . $delimiter . $units[$i];
    }

    /**
     * 获得操作系统
     */
    function get_os()
    {
        if (!empty($_SERVER['HTTP_USER_AGENT'])) {
            $os = $_SERVER['HTTP_USER_AGENT'];
            if (preg_match('/win/i', $os)) {
                $os = 'Windows';
            } else if (preg_match('/mac/i', $os)) {
                $os = 'MAC';
            } else if (preg_match('/linux/i', $os)) {
                $os = 'Linux';
            } else if (preg_match('/unix/i', $os)) {
                $os = 'Unix';
            } else if (preg_match('/bsd/i', $os)) {
                $os = 'BSD';
            } else {
                $os = 'Other';
            }
            return $os;
        } else {
            return 'unknow';
        }
    }

    /**
     * 获得浏览器
     */
    function browser_info()
    {
        if (!empty($_SERVER['HTTP_USER_AGENT'])) {

            $br = $_SERVER['HTTP_USER_AGENT'];
            if (preg_match('/MSIE/i', $br)) {
                $br = 'MSIE';
            } else if (preg_match('/Firefox/i', $br)) {
                $br = 'Firefox';
            } else if (preg_match('/Chrome/i', $br)) {
                $br = 'Chrome';
            } else if (preg_match('/Safari/i', $br)) {
                $br = 'Safari';
            } else if (preg_match('/Opera/i', $br)) {
                $br = 'Opera';
            } else {
                $br = 'Other';
            }

            return $br;
        } else {

            return 'unknow';
        }
    }
    /**
     * 转换字段key为置顶规则的key
     * @param $rule ['old_field'=>'new_field']
     * @param $data ['old_field'=>'item']
     * @return array
     */
    public function paramFieldChange($rule,$data){
        $new_data = [];
        foreach ($data as $key=>$item){
            if(!isset($rule[$key])){
                $new_data[$key] = $item;
            }else {
                $new_data[$rule[$key]] = $item;
            }
        }
        return $new_data;
    }

}